package com.minsf.rpc.registry;

import com.minsf.rpc.config.RegistryConfig;
import com.minsf.rpc.model.ServiceMetaInfo;

import java.util.List;

/**
 * @Description 注册中心
 * @Author minify
 * @Date 2024/3/27 22:04
 * @Project sf-rpc
 */
public interface Registry {

    /**
     * 初始化
     * @param registryConfig
     */
    void init(RegistryConfig registryConfig);

    /**
     * 服务注册
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 注销服务
     */
    void unRegistry(ServiceMetaInfo serviceMetaInfo);

    /**
     * 服务发现 （获取某服务的所有节点，消费端）
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey);


    /**
     * 服务销毁
     */
    void destroy();

    /**
     * 心跳检测
     */
    void heartBeat();

    /**
     * 监听（消费端）
     * @param serviceNodeKey
     */
    void watch(String serviceNodeKey);
}
